其他
坐标转换源码分享,你能看懂吗?
大地坐标转换为直角坐标
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 大地坐标转换为直角坐标
{
//参心大地坐标转换为参心直角坐标(BLH-->XYZ)
class Program
{
static void Main(string[] args)
{
//初始化变量
double B, L, H, X, Y, Z;
B = Convert.ToDouble(Console.ReadLine());
L = Convert.ToDouble(Console.ReadLine());
H = Convert.ToDouble(Console.ReadLine());
//转化
BLH2XYZ(B, L, H, out X, out Y, out Z);
//输出计算结果
Console.WriteLine("X={0,12:F3},Y={1,12:F3},Z={0,12:F3}", X, Y, Z);
Console.ReadKey();
}
/// <summary>
/// 参心大地坐标转换为参心空间直角坐标系(BLH-->XYZ)
/// </summary>
/// <param name="B">纬度(以度为单位)</param>
/// <param name="L">经度(以度为单位)</param>
/// <param name="H">大地高(以米为单位)</param>
/// <param name="X">X分量(以米为单位)</param>
/// <param name="Y">X分量(以米为单位)</param>
/// <param name="Z">X分量(以米为单位)</param>
private static void BLH2XYZ(double B, double L, double H, out double X, out double Y, out double Z)
{
//将角度转换为弧度
double deg2rad = Math.PI / 180;
B = B * deg2rad;
L = L * deg2rad;
//计算相关参数
double e2 = GetE2();
double N = GetN(B);
//转化计算
X = (N + H) * Math.Cos(B) * Math.Cos(L);
Y = (N + H) * Math.Cos(B) * Math.Sin(L);
Z = (N * (1 - e2) + H) * Math.Sin(B);
}
/// <summary>
/// 计算第一偏心率的平方
/// </summary>
/// <returns>第一偏心率的平方</returns>
private static double GetE2()
{
double a = 6378137;
double f = 1 / 298.257222101;
double e2 = 2 * f - f * f;
return e2;
}
/// <summary>
/// 计算卯酉圈曲率半径
/// </summary>
/// <param name="B">纬度(以弧度为单位)</param>
/// <returns>椭球面卯酉圈的曲率半径</returns>
private static double GetN(double B)
{
double e2 = GetE2();
double a = 6378137;
double sinB = Math.Sin(B);
double N = a / Math.Sqrt(1 - e2 * sinB * sinB);
return N;
}
}
}
来源:测绘程序设计 转自:GeomaticsCente
END
一款最好用的坐标转换小工具,附下载!坐标转换计算方法(真的没几个人懂得了)利用CORS求解CGCS2000与独立坐标转换参数的方法及过程
坐标转换与参数计算介绍,测绘人必备知识点!